<?php
require_once ('Versement.php');
require_once ('Historique.php');
require_once ('Validator.php');


/**
 * Classe permettant de simuler les Animaux
 * @author zikrija.saric@heig-vd.ch, alain.borel@heig-vd.ch, phonepheth.manixab@heig-vd.ch
 * @version 1.0
 * @created 30-mai-2012 08:58:38
 */
class Animal
{

    /**
     * liste des types d'implémentation
     * @var string 
     */
    public static $enumIMPLANTATION = array('Déjà implantée','Implantée par la SPA','Pas de puce');
    /**
     * liste des sexes
     * @var string 
     */
    public static $enumSEXE = array('Mâle','Femelle','Mâle castré','Femelle stérilisée','Indeterminé');
    /**
     * liste des couleurs
     * @var string 
     */
    public static $enumCOULEUR = array('Beige','Blanc','Bleu','Brun','Gris','Jaune','Noir','Roux','Vert','Autre');    

    /**
     * Identifiant de l'animal
     * @var int 
     */
    protected $id;
    /**
     * N° de puce à 15 chiffres de l'animal 
     * @var int 
     */
    protected $puceNo;		// [0..1]
    /**
     * Implantation de la puce
     * @var string 
     */
    protected $implantation;          // [0..1]
    /**
     * Nom de l'animal
     * @var string
     */
    protected $nom;
    /**
     * Second nom de l'animal
     * @var string
     */
    protected $secondNom;		// [0..1]
    /**
     * Date de naissance de l'animal
     * @var date
     */
    protected $dateNaissance;         // [0..1]
    /**
     * Date de décès de l'animal
     * @var date
     */
    protected $dateDeces;		// [0..1]
    /**
     * Sexe de l'animal
     * @var string
     */
    protected $sexe;
    /**
     * Couleur de l'animal
     * @var string
     */
    protected $couleur;
    /**
     * Photo de profil de l'animal
     * @var string
     */
    protected $photoProfil;           // [0..1]
    /**
     * Longueur des poils de l'animal
     * @var int 
     */
    protected $longueurPoil;          // [0..1]
    /**
     * Médaille de l'animal
     * @var string
     */
    protected $medaille;		// [0..1]
    /**
     * Tatouage de l'animal
     * @var string
     */
    protected $tatouage;		// [0..1]
    /**
     * Remarque de l'animal
     * @var string
     */
    protected $remarque;		// [0..1]
    /**
     * Type d'animal
     * @var string 
     */
    protected $typeDeRace_nom;

    /**
     * Permet de récupérer l'id de l'animal
     * @return int 
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Permet de récupérer le numéro de puce de l'animal
     * @return int 
     */
    public function getPuceNo() {
        return $this->puceNo;
    }

    /**
     * Permet de récupérer le type d'implantation de l'animal
     * @return string
     */
    public function getImplantation() {
        return $this->implantation;
    }

    /**
     * Permet de récupérer le nom de l'animal
     * @return string
     */
    public function getNom() {
        return $this->nom;
    }

    /**
     * Permet de récupérer le second nom de l'animal
     * @return string
     */
    public function getSecondNom() {
        return $this->secondNom;
    }

    /**
     * Permet de récupérer la date de naissance de l'animal
     * @return date
     */
    public function getDateNaissance() {
        return $this->dateNaissance;
    }

    /**
     * Permet de récupérer la date de décès de l'animal
     * @return date
     */
    public function getDateDeces() {
        return $this->dateDeces;
    }

    /**
     * Permet de récupérer le sexe de l'animal
     * @return string
     */
    public function getSexe() {
        return $this->sexe;
    }

    /**
     * Permet de récupérer la couleur de l'animal
     * @return string
     */
    public function getCouleur() {
        return $this->couleur;
    }

    /**
     * Permet de récupérer le nom de la photo de l'animal
     * @return string
     */
    public function getPhotoProfil() {
        return $this->photoProfil;
    }

    /**
     * Permet de récupérer la longueur des poils de l'animal
     * @return int
     */
    public function getLongueurPoil() {
        return $this->longueurPoil;
    }

    /**
     * Permet de récupérer la médaille de l'animal
     * @return string
     */
    public function getMedaille() {
        return $this->medaille;
    }

    /**
     * Permet de récupérer le tatouage de l'animal
     * @return string
     */
    public function getTatouage() {
        return $this->tatouage;
    }
    /**
     *  Permet de récupérer la remarque de l'animal
     * @return type 
     */
    public function getRemarque() {
        return $this->remarque;
    }

    /**
     * Permet de récupérer le type de l'animal
     * @return string
     */
    public function getTypeDeRace_nom() {
        return $this->typeDeRace_nom;
    }

    /**
     * Permet de définir l'id de l'animal
     * @param int $id 
     */
    public function setId($id) {
        $this->id = $id;
    }

    /**
     * Permet de définir le numéro de puce de l'animal
     * @param int $puceNo 
     */
    public function setPuceNo($puceNo) {
        $this->puceNo = $puceNo;
    }

    /**
     * Permet de définir le type d'implantation de l'animal
     * @param string $implantation 
     */
    public function setImplantation($implantation) {
        $this->implantation = $implantation;
    }

    /**
     * Permet de définir le nom de l'animal
     * @param string $nom 
     */
    public function setNom($nom) {
        $this->nom = $nom;
    }

    /**
     * Permet de définir le second nom de l'animal
     * @param string $secondNom 
     */
    public function setSecondNom($secondNom) {
        $this->secondNom = $secondNom;
    }

    /**
     * Permet de définir la date de naissance de l'animal
     * @param date $dateNaissance 
     */
    public function setDateNaissance($dateNaissance) {
        $this->dateNaissance = $dateNaissance;
    }

    /**
     * Permet de définir la date de décès de l'animal
     * @param date $dateDeces 
     */
    public function setDateDeces($dateDeces) {
        $this->dateDeces = $dateDeces;
    }

    /**
     * Permet de définir le sexe de l'animal
     * @param string $sexe 
     */
    public function setSexe($sexe) {
        $this->sexe = $sexe;
    }

    /**
     * Permet de définir la couleur de l'animal
     * @param string $couleur 
     */
    public function setCouleur($couleur) {
        $this->couleur = $couleur;
    }

    /**
     * Permet de définir le nom de la photo de l'animal
     * @param string $photoProfil 
     */
    public function setPhotoProfil($photoProfil) {
        $this->photoProfil = $photoProfil;
    }

    /**
     * Permet de définir la longueur des poils de l'animal
     * @param int $longueurPoil 
     */
    public function setLongueurPoil($longueurPoil) {
        $this->longueurPoil = $longueurPoil;
    }

    /**
     * Permet de définir la médaille de l'animal
     * @param string $medaille 
     */
    public function setMedaille($medaille) {
        $this->medaille = $medaille;
    }

    /**
     * Permet de définir le tatouage de l'animal
     * @param string $tatouage 
     */
    public function setTatouage($tatouage) {
        $this->tatouage = $tatouage;
    }

    /**
     * Permet de définir la remarque de l'animal
     * @param remarque $remarque 
     */
    public function setRemarque($remarque) {
        $this->remarque = $remarque;
    }
    
    /**
     * Permet de définir le type de l'animal
     * @param string $typeDeRace_nom 
     */
    public function setTypeDeRace_nom($typeDeRace_nom) {
        $this->typeDeRace_nom = $typeDeRace_nom;
    }

    /**
     * Permet d'instancier un objet Animal
     * @param int $id
     * @param int $puceNo
     * @param string $implantation
     * @param string $nom
     * @param string $secondNom
     * @param date $dateNaissance
     * @param date $dateDeces
     * @param string $sexe
     * @param string $couleur
     * @param string $photoProfil
     * @param int $longueurPoil
     * @param string $medaille
     * @param string $tatouage
     * @param string $remarque
     * @param string $typeDeRace_nom 
     */
    public function __construct($id, $puceNo, $implantation, $nom, $secondNom, $dateNaissance, $dateDeces, $sexe, $couleur, $photoProfil, $longueurPoil, $medaille, $tatouage, $remarque, $typeDeRace_nom) {
        $this->id = $id;
        $this->puceNo = $puceNo;
        $this->implantation = $implantation;
        $this->nom = $nom;
        $this->secondNom = $secondNom;
        $this->dateNaissance = $dateNaissance;
        $this->dateDeces = $dateDeces;
        $this->sexe = $sexe;
        $this->couleur = $couleur;
        $this->photoProfil = $photoProfil;
        $this->longueurPoil = $longueurPoil;
        $this->medaille = $medaille;
        $this->tatouage = $tatouage;
        $this->remarque = $remarque;
        $this->typeDeRace_nom = $typeDeRace_nom;
    }



    /**
     * Retourne vrai si l'objet est valide
     * @return bool Vrai si l'objet est valide
     */
    public function isValid() {
        return !count($this->getErrors());
    }

    /**
     * Retourne un tableau contenant les noms des champs non valides
     * @return array Tableau associatif contenant les noms de champs non valides
     */
    public function getErrors() {
        
        $validator = new Validator($this);
/*
        $validator->addCheck(new CheckString('nom'));
        $validator->addCheck(new CheckString('couleur'));
        $validator->addCheck(new CheckString('TypeAnimal'));
        
        if($this->puceNo)
            $validator->addCheck(new CheckPuce('puceNo'));
        if($this->implantation)
            $validator->addCheck(new CheckString('implantation'));
        if($this->secondNom)
            $validator->addCheck(new CheckString('secondNom'));
        if($this->dateNaissance)
            $validator->addCheck(new CheckDateSlash('dateNaissance'));
        if($this->dateDeces)
            $validator->addCheck(new CheckDateSlash('dateDeces'));
        if($this->sexe)
            $validator->addCheck(new CheckString('sexe'));
        if($this->longueurPoil)
            $validator->addCheck(new CheckUnsignedNumeric('longueurPoil'));
        if($this->medaille)
            $validator->addCheck(new CheckString('medaille'));
        if($this->tatouage)
            $validator->addCheck(new CheckString('tatouage'));
        if($this->remarque)
            $validator->addCheck(new CheckString('remarque'));
        */
        $validator->validate();
        return $validator->getErrors();
    }




}
?>